#define SENSORPIN A0
const byte dataReadinglength = 10; //数组总数
int dataReading[dataReadinglength] = {0}; // 0 - 9 10个度数

void setup() {
  Serial.begin(9600);
  pinMode(SENSORPIN, INPUT);
}

void loop() {
    for (int i = 0; i < dataReadinglength; i++) {
      // 将读数放入到数组中
      dataReading[i] = analogRead(SENSORPIN);
      delay(50);
    }
    getValue(dataReading, dataReadinglength, true);
}
//气泡排序，去掉最小的，去掉最大的，然后平均
int getValue(int array[], int size, bool printlog) {
  bubbleSort(array, size); //气泡排序
  if (printlog) {
    Serial.print("After Sorting ");
    printArray(dataReading, size);
  }
  //对于array size小于3个的数组，选择全部数据
  byte arrayBegin = 0;
  byte arrayEnd = size - 1;
  //对于array size 大于3个的数据，
  //去掉最小和最大，然后选择中间的30%数据
  if (size > 3) {
    arrayBegin = size * 0.3;
    arrayEnd = size * 0.7;
  }
  int readingSum = 0;
  for (int i = arrayBegin; i < arrayEnd; i++) {
    readingSum += dataReading[i];
  }
  int readingAvg = readingSum / (arrayEnd - arrayBegin);

  if (printlog) {
    Serial.print("Average :");
    Serial.println(readingAvg);
  }
  return readingAvg;
}

//气泡排序 size 为数组的length
void bubbleSort(int array[], int size) {
  //外循环 ： 循环总次数为 (size -1) ：  step = 0 to size -2
  for (int otter = 0; otter < size - 1; ++otter) {
    // 内循环 - 总次数为 （size-1-step） ： i = 0 to size - 2 - step
    for (int inner = 0; inner < size - 1 - otter; ++inner) {
      // 比较数组中当前数值和下一个的数值
      // 如果当前数值大，则交换位置
      if (array[inner] > array[inner + 1]) {
        int temp = array[inner];
        array[inner] = array[inner + 1];
        array[inner + 1] = temp;
      }
    }
  }
}

// 打印数组
void printArray(int array[], int size) {
  for (int i = 0; i < size; ++i) {
    Serial.print(array[i]);
    Serial.print(", ");
  }
  Serial.println("");
}
